package mbeans;

import java.util.Date;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import model.Emprestimo;
import model.Livro;
import model.Usuario;
import armazenamento.Cadastros;

@ManagedBean(name="principal")
@SessionScoped
public class Principal {
	// referência para uma única instância - Singleton
	private static Cadastros cadastros;
		
	private String login;
	private String senha;
	private Usuario usuario = null;
	private Livro novoLivro = new Livro();
	private String msg = "";
	private int isbnEmprestar;
	private int isbnDevolver;
	private Livro emprestar;
	private String responsavelEmprestimo;
	
	public Principal() {
		super();
		cadastros = Cadastros.getInstance();
	}

	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}
	
	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

	public Livro getNovoLivro() {
		return novoLivro;
	}

	public void setNovoLivro(Livro novoLivro) {
		this.novoLivro = novoLivro;
	}

	public int getIsbnEmprestar() {
		return isbnEmprestar;
	}

	public void setIsbnEmprestar(int isbnEmprestar) {
		this.isbnEmprestar = isbnEmprestar;
		if (usuario != null) {
			this.setEmprestar(this.usuario.getLivroByIsbn(isbnEmprestar));
		}
	}

	public int getIsbnDevolver() {
		return isbnDevolver;
	}

	public void setIsbnDevolver(int isbnDevolver) {
		this.isbnDevolver = isbnDevolver;
	}

	public Livro getEmprestar() {
		return emprestar;
	}

	public void setEmprestar(Livro emprestar) {
		this.emprestar = emprestar;
	}

	public String getResponsavelEmprestimo() {
		return responsavelEmprestimo;
	}

	public void setResponsavelEmprestimo(String responsavelEmprestimo) {
		this.responsavelEmprestimo = responsavelEmprestimo;
	}

	public String autentica() {
		usuario = cadastros.getUsuario(this.login);
		if (usuario != null && senha.equals(usuario.getSenha())) {
			this.msg = "";
			return "login";
		}
		this.msg = "Login e senha não correspondem a um usuário cadastrado!";
		return "erro";
	}
	
	public String logout() {
		this.usuario = null;
		this.msg = "";
		return "logout";
	}
	
	public String adicionaLivro() {
		if (usuario != null) {
			usuario.adicionaLivro(novoLivro);
			this.novoLivro = new Livro();
			this.msg = "Livro cadastrado com sucesso!";
			return "livroCadastrado";
		}
		return "erroCadastro";
	}
	
	public String registrarEmprestimo() {
		if (usuario != null) {
			Emprestimo novo = new Emprestimo();
			novo.setLivro(this.emprestar);
			novo.setResponsavel(this.responsavelEmprestimo);
			novo.setData(new Date());
			usuario.adionaEmprestimo(novo);
			this.emprestar = null;
			this.isbnEmprestar = 0;
			this.responsavelEmprestimo = "";
			return "emprestado";
		}
		return "erro";
	}
	
	public String devolverLivro() {
		if (usuario != null) {
			Livro liv = usuario.getLivroByIsbn(isbnDevolver);
			Emprestimo emp = liv.getEmprestimo();
			liv.setEmprestimo(null);
			usuario.removeEmprestimo(emp);
		}
		return "devolvido";
	}
}
